自定义项使用方式
自定义项就是项目实施过程中根据自身需求自己定义的字段,目前产品自定义项支持两种方式,一种是系统预置的字段,但业务单据的表头、表体,在后台数据库中有对应字段存储数据,这种预置的字段有数量限制,目前产品中供应链中预置了表头、表体各20个字段,人力资源自定义项是不受平台自定义项控制的,可以自行增加;财务会计的自定义项单据不同,数量也不同,比如应收应付单据有30个,只有供应链的单据中自定义项必须在相关单据中做引用才能使用。另外一种自定义项字段是单据模版中增加的,不在数据库中存储,只是根据特定公式显示特定内容。下面我就针对供应链领域分别介绍这两种自定义项的使用方式。
这类系统预置的自定义项,后台数据库中预置了对应字段,可以存储数据并上下游单据传递内容,相关使用节点可以做查询条件来使用,预置报表大部分都已经展示了对应自定义项内容,单据打印时可以直接拖拽数据源来使用打印。
在使用预置的自定义项之前,必须先定义自定义项,指定自定义项数据类型:
目前产品自定义项的数据类型支持以下几种:
统计:可以关联使用档案(系统预置档案或自定义档案都行);
备注:字符长度不能大于100;
数字:字符长度不能大于16;需要定义小数位数;
日期:字符长度默认为10;
预置的数据类型不能自行增加,只能在这几种类型中选择使用。
如果自定义项需要参照特定档案时,系统预置了各种档案供使用,比如存货档案、人员档案,当这些都不满足要求时,就需要自行定义自定义项档案了,只有统计型自定义项才需要,其他类型直接跳过这步即可。
支持自定义项档案分级;
支持档案是否允许公司变更;
自定义项定义完成后,就需要在业务单据上做引用,哪些单据需要在哪个字段上使用,然后在根据引用的具体字段去修改对应单据的单据模版上的字段。
供应链的业务数据都是上下游传递的,因此如果该自定义项需要在整个业务流程中都需要传递,那么这个业务链条上的单据都需要做引用才行,比如说我销售订单上自定义项1需要传递整个业务流程,那么引用的单据就包括销售订单,销售发货单,销售出库单,销售发票,存货核算的出库单。
自定义项引用后,相关单据的查询条件、报表都可以自动处理,自动加载为查询条件和报表展示内容,不需要额外设置。
特别说明:供应链的业务单据上严禁没有做自定义项定义和引用就直接在单据上使用,这种情况下系统会检查报错,不允许保存!报错如下图:
特别说明:供应链-库存管理-报废和报废处理节点,自定义项引用需要引用在库存出入库单表头或表体,这2种单据没有单独引用节点。
由于供应链领域自定义项只有预置的表头表体各20个,弥足珍贵,所以对于只需要在一个单据上记录使用的自定义项,就不需要把下游单据都做引用的,那么我们就需要断开跟下游单据的传递关系,避免占用下游单据的自定义项。
这种情况下,我们就需要根据下游单据类型,在数据交换节点找到对应的交换关系,删除对应的自定义项传递连接:
举例说明:销售订单表头自定义项1不需要传递给销售出库单,把销售订单上自定义项1和自定义项pk1对应的映射都删除(包括前后连接线和映射这2个字),保存后清缓存,这样销售订单上的表头自定义项1就不会往下游传递数据了,销售出库单上的自定义项1就可以节省下来记录更需要的信息了。
特别说明:修改数据交换后会在代码中(home)存储修改后的文件,如果软件升级的话,那么新的home下没有修改的文件了,就会自动恢复到初始状态,升级后请留意!
在对应单据的字段勾选卡片是否显示,列表是否显示即可,不需要做其他修改,特别不需要在高级属性修改数据类型进行类型设置!!修改完成后把模版分配给指定操作人员,清缓存后重新登录系统,单据界面自动根据定义自定义项时的名称显示对应字段。
库存管理中的单据自定义项名称跟其他单据不一样,特别说明一下:库存单据表头自定义项:H代表表头,B代表表体
库存单据表体自定义项是:
库存单据表体的这个字段是批次档案上的自定义项,不是单据的,注意不用混了!
如果是统计型自定义项,供应链领域处理这种自定义项时,是同时使用2个字段记录信息的,比如自定义项1,一个是vdef1,用来记录档案的名称,一个是pk_defdoc1,用来记录档案的主键值,其他类型的自定义项只有vdef1用来记录内容。
特别说明:pk_defdoc这类字段一定不要自行在模版上显示使用!
清缓存重新登录即可显示如下:
如在销售订单或销售发票上做自定义项引用设置时保存系统报错:
报错原因:这种报错是因为自定义项在单据上直接使用了,没有做引用,对应单据的数据库中已经存储数值了,因此在做自定义项引用保存时系统检查数据库中对应字段有值,就会提示这个。
由于项目实施时设置混乱,界面上不好检查出哪些单据做了引用,因此提供后台查询脚本,便捷查询出哪些单据的自定义项存储的数据。根据现场业务情况来决定是清除对应字段的内容还是更换其他自定义项来使用。
脚本1:如果引用的自定义项是销售订单表头,请修改下面脚本范本查询自定义项使用的单据,查询哪个自定义项就直接修改下面脚本中红色字体中的数字即可,如查询销售订单表头自定义项1的使用情况:
select b.unitcode 公司编码,a.vreceiptcode 销售订单号,a.dr 是否删除,a.vdef1 销售订单表头自定义项,a.pk_defdoc1 销售订单表头自定义项主键 from so_sale a
left join bd_corp b on a.pk_corp=a.pk_corp
where a.vdef1 is not null or a.pk_defdoc1 is not null
举例说明:如果查询销售订单表头自定义项15的使用情况,脚本改为:
select b.unitcode 公司编码,a.vreceiptcode 销售订单号,a.dr 是否删除,a.vdef15 销售订单表头自定义项,a.pk_defdoc15 销售订单表头自定义项主键 from so_sale a
left join bd_corp b on a.pk_corp=a.pk_corp
where a.vdef15 is not null or a.pk_defdoc15 is not null
脚本2:特别说明:销售订单表体和销售发票表体的自定义项都存储在一个表里so_saleexecute,因此引用检查时都检查这个表,发现这个表里对应的自定义项有值就会报引用关系,不区分是销售订单还是销售发票的,(产品bug,补丁解决:2.0-2.5patch_销售订单和发票自定义项引用冲突..\u8c重要通版补丁\2.0-2.5patch_销售订单和发票自定义项引用冲突.zip)因此这个查询脚本有2个,一个是查询销售订单表体自定义项的数据的,一个是查询销售发票的表体自定义项的数据的。
查询销售订单的对应自定义项值,就直接修改下面脚本中红色字体中的数字即可,如查询销售订单表体自定义项1的使用情况:
select distinct a.vreceiptcode 销售订单单据号, b.unitcode 公司编码, a.dr 删除标志,d.vdef1 销售订单表体自定义项,d.pk_defdoc1 销售订单表体自定义项主键
from so_sale a
left join bd_corp b on a.pk_corp=b.pk_corp
left join so_saleexecute d on d.csaleid=a.csaleid
where a.csaleid in (select csaleid
from so_saleexecute
where vdef1 is not null
or pk_defdoc1 is not null)
查询销售发票的对应自定义项值,就直接修改下面脚本中红色字体中的数字即可,如查询销售发票表体自定义项1的使用情况:
select distinct a.vreceiptcode 销售发票单据号, b.unitcode 公司编码, a.dr 删除标志,d.vdef1 销售发票表体自定义项,d.pk_defdoc1 销售发票表体自定义项主键
from so_saleinvoice a
left join bd_corp b on a.pk_corp=b.pk_corp
left join so_saleexecute d on d.csaleid=a.csaleid
where a.csaleid in (select csaleid
from so_saleexecute
where vdef1 is not null
or pk_defdoc1 is not null)
脚本3:如果引用的自定义项是销售发票表头,请修改下面脚本范本查询自定义项使用的单据,查询哪个自定义项就直接修改下面脚本中红色字体中的数字即可,如查询销售发票表头自定义项1的使用情况:
select b.unitcode 公司编码,
so.vreceiptcode 销售发票单据号,so.dr 是否删除,so.vdef1 销售发票表头自定义项,so.pk_defdoc1 销售发票表头自定义项主键
from so_saleinvoice so
left join bd_corp b on b.pk_corp = so.pk_corp
where so.vdef1 is not null
or so.pk_defdoc1 is not null
脚本4、特别说明:销售订单表体和销售发票表体的自定义项都存储在一个表里so_saleexecute,因此引用检查时都检查这个表,发现这个表里对应的自定义项有值就会报引用关系,不区分是销售订单还是销售发票的,因此这个查询脚本有2个,一个是查询销售订单表体自定义项的数据的,一个是查询销售发票的表体自定义项的数据的。
查询销售订单的对应自定义项值,就直接修改下面脚本中红色字体中的数字即可,如查询销售订单表体自定义项1的使用情况:
select distinct a.vreceiptcode 销售订单单据号, b.unitcode 公司编码, a.dr 删除标志,d.vdef1 销售订单表体自定义项,d.pk_defdoc1 销售订单表体自定义项主键
from so_sale a
left join bd_corp b on a.pk_corp=b.pk_corp
left join so_saleexecute d on d.csaleid=a.csaleid
where a.csaleid in (select csaleid
from so_saleexecute
where vdef1 is not null
or pk_defdoc1 is not null)
查询销售发票的对应自定义项值,就直接修改下面脚本中红色字体中的数字即可,如查询销售发票表体自定义项1的使用情况:
select distinct a.vreceiptcode 销售发票单据号, b.unitcode 公司编码, a.dr 删除标志,d.vdef1 销售发票表体自定义项,d.pk_defdoc1 销售发票表体自定义项主键
from so_saleinvoice a
left join bd_corp b on a.pk_corp=b.pk_corp
left join so_saleexecute d on d.csaleid=a.csaleid
where a.csaleid in (select csaleid
from so_saleexecute
where vdef1 is not null
or pk_defdoc1 is not null)
这类自定义项是在单据模版上直接增加的字段,这些字段在数据库中没有预置,不能存储,只能根据特定公式显示特定内容,也不能做使用节点的查询条件,对应的报表也不能自动显示,打印时也没有对应数据源,需要打印自己做自定义变量来使用。
举例说明:采购订单,单据模版编码21
点增加自定义项,出现自定义项主键界面,这个主键可以输入字母或数字都可以
根据需要修改显示名称:
根据需要设置显示公式,显示特定内容
我们以销售订单为例,需求实现:销售订单录入客户后自动带出客户档案上所属地区分类。
这类项目只在相关单据上显示,后台不存储,也不做上下游单据之间传递。
登录集团-企业建模平台-模版管理-单据模版设置工具,找到需要设定业务单据,例如:销售订单,根据需要增加显示的字段在业务单据上的关联字段位置,选择增加显示字段的位置,比如根据客户字段显示客户的联系人,那么增加显示的联系人就需要放置在单据的表头,如果是根据存货显示存货档案的自定义项,那么就需要把增加的字段放置在单据的表体。在模版的空白地方,鼠标右键,增加自定义项目
项目主键根据需要设置,尽量使用字母即可
规则:一定是业务单据上操作员手工录入的字段,只有这种字段才能触发执行公式,公式总所设置的字段,必须都同在表头位置或同在表体位置,公式不支持跨表头表体取值赋值!
lxr->getColValue(bd_areacl,areaclname,pk_areacl, getColValue(bd_cubasdoc,pk_areacl,pk_cubasdoc,ccustbasid))
这个公式也可以用下面方式表达:
a->getColValue(bd_cubasdoc,pk_areacl,pk_cubasdoc,ccustbasid);
lxr->getColValue(bd_areacl,areaclname,pk_areacl,a)
公式的含义是根据客户主键获取客户档案中所属 地区分类主键,并把地区分类主键转换成地区分类名称。
效果验证: